package com.heng.controller;

import com.heng.dto.CreateOrderDTO;
import com.heng.dto.OrderResponseVO;
import com.heng.dto.OrderStatusVO;
import com.heng.service.OrderService;
import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;


@CrossOrigin("*")
@RestController
@Validated
public class OrderController {

    @Resource
    private OrderService orderService;

    /**
     * 支付成功后创建订单接口
     * @param token 用户登录Token（用于解析用户ID）
     * @param dto 创建订单入参
     * @return 统一响应格式
     */
    @PostMapping("/api/orders/createAndPay")
    public Map<String, Object> createAndPay(
            @RequestHeader("Authorization") String token,
            @Valid @RequestBody CreateOrderDTO dto) {
        
        // 实际项目中：从Token解析用户ID（这里模拟用户ID=1001）
        Long userId = 1001L; // 替换为：JwtUtil.parseUserId(token)
        System.err.println(dto);
        dto.setAddressId(1L);
        dto.setDistrict("鸣鹿路");
        dto.setCity("鹿邑");
        dto.setDetailAddress("小郭庄");
        dto.setReceiverPhone("11111111111");
        // 调用服务层创建订单
        dto.setOriginalAmount(new BigDecimal(9999999));
        OrderResponseVO orderVO = orderService.createPaySuccessOrder(dto, userId);

        // 构建统一响应
        Map<String, Object> response = new HashMap<>();
        response.put("code", 200);
        response.put("msg", "支付成功，订单创建成功");
        response.put("data", orderVO);
        System.err.println(response);
        return response;
    }



    /**
     * 订单状态查询接口（供前端支付后轮询）
     * 路径：GET /api/orders/{orderNumber}/status
     */
    @GetMapping("/api/orders/{orderNumber}/status")
    public Map<String, Object> getOrderStatus(
            @PathVariable("orderNumber") String orderNumber, // 路径参数：订单号
            @RequestHeader("Authorization") String token) { // 登录Token

        // 实际项目中：从Token解析用户ID（这里模拟用户ID=1001）
        Long userId = 1001L; // 替换为：JwtUtil.parseUserId(token)

        // 调用服务层查询状态
        OrderStatusVO statusVO = orderService.getOrderStatusByNo(orderNumber, userId);

        // 构建响应（完全匹配前端预期格式）
        return Map.of(
                "code", 200,
                "msg", "查询成功",
                "data", statusVO // data包含status和failReason
        );
    }
}